home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / CUGUK / UTIL_SRC / C016.ZIP / CALC / SELFDOC.C < prev    next >
Text File  |  1990-01-19  |  6KB  |  130 lines

  1. /* Self documentation feature by J. R. Applegate - CSM Computing Center */
  2.  
  3. #include <stdio.h>
  4. #include <conio.h>
  5.  
  6. selfdoc()
  7. {
  8. printf("NAME\n");
  9. printf("hoc - Higher order calculator\n\n");
  10. printf("USAGE\n");
  11. printf("hoc [-]\n\n");
  12. printf("DESCRIPTION\n");
  13. printf("Hoc is an enhanced version of the hoc3 calculator described\n");
  14. printf("in Kernighan and Pike's 'The UNIX Programming Environment.'\n");
  15. printf("It supports infix notation with parentheses and variables\n");
  16. printf("and features a rich collection of mathematical operations,\n");
  17. printf("built-in constants and functions.  Hoc is easy to use and\n");
  18. printf("examination of the EXAMPLE section below will be sufficient\n");
  19. printf("documentation for many users.  The option, -, provides a\n");
  20. printf("brief online help file.  Hoc is exited by typing control Z.\n\n");
  21. printf("Numbers are floating point with a friendly display format.\n");
  22. printf("The input format is that recognized by scanf(3): digits,\n");
  23. printf("decimal point, digits, e or E, signed exponent.  At least\n");
  24. printf("one digit or a decimal point must be present; the other com-\n");
  25. printf("ponents are optional.\n\n");
  26. more();
  27. printf("Variable names are formed from a letter followed by a string\n");
  28. printf("of letters and digits.  The special variable, #, stores the\n");
  29. printf("last number printed.  Hoc has the following operators, in\n");
  30. printf("decreasing order of precedence:\n");
  31. printf("^    exponentiation (FORTRAN **), right associative\n");
  32. printf("+ -  (unary) plus and minus\n");
  33. printf("* / %     multiplication, division, modulo\n");
  34. printf("+ -  addition, subtraction\n");
  35. printf("=    assignment, right associative\n\n");
  36. printf("The following standard mathematical functions are built-in:\n");
  37. printf("abs(x), acos(x), asin(x), atan(x), atan2(x,y), ceil(x),\n");
  38. printf("cos(x), cosh(x), exp(x), floor(x), gamma(x), hypot(x,y),\n");
  39. printf("int(x), j0(x), j1(x), jn(n,x), log(x), log10(x), pow(x,y),\n");
  40. printf("rand(), sin(x), sinh(x), sqrt(x), srand(x), tan(x), tanh(x),\n");
  41. printf("y0(x), y1(x), yn(n,x).\n\n");
  42. printf("Hoc has the following built-in constants:\n");
  43. printf("DEG  57.29577951308232087680       180/pi, degrees per radian\n");
  44. printf("E    2.71828182845904523536        base of natural logarithms\n");
  45. printf("GAMMA     0.57721566490153286060   Euler-Mascheroni constant\n");
  46. printf("PHI  1.61803398874989484820        (sqrt(5) + 1)/2, golden ratio\n");
  47. printf("PI   3.14159265358979323846        circular transcendental #\n");
  48. more();
  49. printf("The assignment is parsed by default as a statement rather\n");
  50. printf("than as an expression, so assignments typed interactively do\n");
  51. printf("not print their value.  The assignment operator assigns the\n");
  52. printf("value of its right operand to its left operand, and yields\n");
  53. printf("the value, so multiple assignments work.  The semicolon is\n");
  54. printf("admitted as an alternate terminator to the standard newline\n");
  55. printf("statement terminator.\n\n");
  56. printf("EXAMPLES\n");
  57. printf("Here's an example session with some explanatory comments\n");
  58. printf("inserted:\n");
  59. printf("% hoc\n");
  60. printf("3 + 4\n");
  61. printf("     7\n");
  62. printf("3^4\n");
  63. printf("     81\n");
  64. printf("4*(5 + (5 + 6))\n");
  65. printf("     64\n");
  66. printf("sin(PI/6)\n");
  67. printf("     .5\n");
  68. printf("17/3\n");
  69. printf("     5.66666667\n");
  70. printf("#/3            /* Note: # stands for last number printed */  \n");
  71. printf("     .666666667\n");
  72. more();
  73. printf("x = 3\n");
  74. printf("y = 4\n");
  75. printf("z = x^2 + y^2\n");
  76. printf("sqrt(z)\n");
  77. printf("     5\n");
  78. printf("hypot(3,4)          /* sqrt of sum of squares */\n");
  79. printf("     5\n");
  80. printf("j0(0)               /* A Bessel function */\n");
  81. printf("     1\n");
  82. printf("jn(2,0)             /* Another one */\n");
  83. printf("     0\n");
  84. printf("tmin = 1.3 ; c = 6970  /* Semi-colon is alternate terminator */\n");
  85. printf("c* tmin\n");
  86. printf("     9061\n");
  87. printf("#/2\n");
  88. printf("     4530.5\n");
  89. printf("dt = .004\n");
  90. printf("1/(2*dt)\n");
  91. printf("     125\n");
  92. printf("17 % 3         /* 17 mod 3 */\n");
  93. printf("     2\n");
  94. printf("PI % 1         /* Think about it! */\n");
  95. printf("     .141592654\n");
  96. more();
  97. printf("PI % 0\n");
  98. printf("     3.14159265\n");
  99. printf("int(PI)\n");
  100. printf("     3\n");
  101. printf("^Z\n\n");
  102. printf("AUTHOR\n");
  103. printf("Brian W. Kernighan and Rob Pike designed and wrote hoc in\n");
  104. printf("Chapter 8 of 'The UNIX Programming Environment.'  Much of\n");
  105. printf("the above documentation is taken from Chapter 9 and Appendix\n");
  106. printf("B of this book.  Several enhancements given as problems in\n");
  107. printf("the text have been implemented here by Jack K. Cohen: accept\n");
  108. printf("unary plus; include the modulus operator (implemented for\n");
  109. printf("floating point as in the definition given by Knuth, in\n");
  110. printf("volume 1 of the 'Art of Programming'); remembers the last\n");
  111. printf("number printed in the pseudo-variable, # ; allows semicolon\n");
  112. printf("as an expression terminator in addition to newline; frowns\n");
  113. printf("on assignments to built-in constants such as PI; and has\n");
  114. printf("many more built-in functions including some with 2 and 0\n");
  115. printf("arguments.\n\n");
  116. printf("BUGS/RESTRICTIONS\n");
  117. printf("Kernighan and Pike's extensions of hoc to include control\n");
  118. printf("flow statements and user-defined functions are not imple-\n");
  119. printf("mented.\n");
  120. }
  121.  
  122. more()
  123. {
  124. char c;
  125.  
  126. printf("Hit any key to continue ");
  127. c = getchar();
  128. printf("\n");
  129. }
  130.